package cc.shacocloud.luanniao.core.service

import cc.shacocloud.luanniao.core.model.po.UserPo

/**
 *
 * @author 思追(shaco)
 */
interface UserService {

    /**
     * 对明文密码进行编码处理
     *
     * 数据库中不存储明文密码，所以密码在存储是必须通过该方法进行加密处理
     */
    suspend fun encodePassword(password: String): String

    /**
     * 验证从存储获取的编码密码是否与提交的原始密码匹配，然后再对其进行编码。
     * 如果密码匹配，则返回 true，如果不匹配，则返回 false。
     *
     * @param rawPassword 传入的未被加密的密码
     * @param encodedPassword 加密后的密码
     */
    suspend fun matchesPassword(rawPassword: CharSequence, encodedPassword: String): Boolean

    /**
     * 根据 id 查询 [UserPo]
     */
    suspend fun findById(id: Long): UserPo?

    /**
     * 根据用户名查询
     */
    suspend fun findByUsername(username: String): UserPo?


}